iT邦幫忙

2021 iThome 鐵人賽

DAY 19
0
自我挑戰組

C 語言筆記系列 第 19

[C 語言筆記--Day19] Condition Code 幫忙做出 C 語言的 if 語法

  • 分享至 

  • xImage
  •  

大綱

  1. C 語言中的 if
  2. x86-64 中的 condition code
  3. MSP430 的 status register
  4. 參考資料

1. C 語言中的 if

C 語言的就像其他的程式語言,有 if 的語法,

而這個語法就需要 condition code 的幫忙才能實作出來

不過這篇文章會著重在 condition code 的行為,

之後再來探討他要如何幫忙實作出 if 語法

2. x86-64 中的 condition code

condition code 本質上就是一個 register

在 x86-64 的架構中共有 4 個,每個 condition code 都只有一個 bit

分別為:

  • CF: Carry flag (最近一次的運算結果發生 unsigned overflow 時設為 1)
  • ZF: Zero flag (最近一次的運算結果為 0 時設為 1)
  • SF: Sign flag(最近一次的運算結果為負數時設為 1)
  • OF: Overflow flag(最近一次的運算結果發生 signed overflow 時設為 1)

而這裡所說的運算結果可以是 ADD, SUB, CMP 等等的指令

例如說 t = a + b 這個 C 語言句子 tab 都為 int 時:
condition code | 被設為 1 的條件| 註解
----------+--------------+-----
CF | (unsigned)t < (unsigned) a | Unsigned overflow
ZF | (t == 0) | Zero
SF | (t < 0) | Negative
OF | (a < 0 == b < 0) && (t < 0 != a < 0) | Signed overflow

3. MSP430 的 status register

MSP430 的 status register 中,也有同樣功能的 4 個 bit

MSP430 | x86-64 | 註
---+---+---
V | OF | Signed overflow
N | SF | Negative
Z | ZF | Zero
C | CF | Unsigned overflow

可以看這份文件的 3.2.3 Status Register (SR)

4. 參考資料


上一篇
[C 語言筆記--Day18] 用 linked list 實作 merge sort
下一篇
[C 語言筆記--Day20] Condition Code 幫忙做出 C 語言的 if 語法 II
系列文
C 語言筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言